package models

type GetDeptQuery struct {
	Keywords string `json:"keywords,omitempty"` // 关键字(部门名称)
	Status   string `json:"status,omitempty"`   // 状态(1->正常；0->禁用)
}

// GetDeptRes ，部门视图对象
type GetDeptRes struct {

	// 部门编号
	Code string `gorm:"code:component" json:"code,omitempty"`
	// 创建时间
	CreateTime string `gorm:"create_time:component" json:"createTime,omitempty"`
	// 部门ID
	ID int64 `gorm:"column:id" json:"id,omitempty"`
	// 部门名称
	Name string `gorm:"column:name" json:"name,omitempty"`
	// 父部门ID
	ParentID int64 `gorm:"column:parent_id" json:"parentId,omitempty"`
	// 排序
	Sort int64 `gorm:"column:sort" json:"sort,omitempty"`
	// 状态(1:启用；0:禁用)
	Status int64 `gorm:"column:status" json:"status,omitempty"`
	// 修改时间
	UpdateTime string `gorm:"column:update_time" json:"updateTime,omitempty"`
	// 子部门
	Children []GetDeptRes `gorm:"-" json:"children,omitempty"`
}

// GetTreeNodesDept  获取树形结构
func GetTreeNodesDept(parentId int64, nodes []GetDeptRes) []GetDeptRes {
	var tree []GetDeptRes
	for _, node := range nodes {
		if node.ParentID == parentId {
			// 查找当前节点的子节点
			node.Children = GetTreeNodesDept(node.ID, nodes)
			tree = append(tree, node)
		}
	}
	return tree
}

// --- 获取部门下拉 ---

// GetDeptOptionsRes 菜单下拉对象
type GetDeptOptionsRes struct {
	Id       int64               `gorm:"column:id" json:"value"`      // ID
	Name     string              `gorm:"column:name" json:"label"`    // 菜单名称
	ParentId int64               `gorm:"column:parent_id" json:"-"`   // ParentId
	Children []GetDeptOptionsRes `gorm:"-" json:"children,omitempty"` // 子菜单
}

// GetTreeNodesDeptOptions 获取树形下拉结构
func GetTreeNodesDeptOptions(parentId int64, nodes []GetDeptOptionsRes) []GetDeptOptionsRes {
	var tree []GetDeptOptionsRes
	for _, node := range nodes {
		if node.ParentId == parentId {
			// 查找当前节点的子节点
			node.Children = GetTreeNodesDeptOptions(node.Id, nodes)
			tree = append(tree, node)
		}
	}
	return tree
}

// DeptFormData ，部门表单对象
type DeptFormData struct {
	// 部门编号
	Code string `gorm:"column:code" json:"code,omitempty"`
	// 部门ID
	ID int64 `gorm:"column:id" json:"id,omitempty"`
	// 部门名称
	Name string `gorm:"column:name" json:"name,omitempty"`
	// 父部门ID
	ParentID int64 `gorm:"column:parent_id" json:"parentId"`
	// 排序(数字越小排名越靠前)
	Sort int64 `gorm:"column:sort" json:"sort,omitempty"`
	// 状态(1:启用;0:禁用)
	Status *int64 `gorm:"column:status" json:"status,omitempty"`
}

// ----- 新增部门 ------

// AddDeptBody ，新增部门表单对象
type AddDeptBody struct {
	// 部门编号
	Code string `gorm:"column:code" json:"code"`
	// 部门ID
	ID int64 `gorm:"column:id" json:"-"`
	// 部门名称
	Name string `gorm:"column:name" json:"name"`
	// 父部门ID
	ParentID int64 `gorm:"column:parent_id" json:"parentId"`
	// 排序(数字越小排名越靠前)
	Sort int64 `gorm:"column:sort" json:"sort"`
	// 状态(1:启用;0:禁用)
	Status int64 `gorm:"column:status" json:"status"`
}
